.. _cmcIxWaitDone: cmcIxWaitDone ================================ -------------------------------- SYNOPSYS ````````````` .. code-block:: none VT_I4 cmcIxWaitDone ([in] VT_I4 BoardID, [in] VT_I4 MapIndex, [in] VT_I4 IsBlocking) DESCRIPTION ````````````` - ì§€ì •í•œ ë³´ê°„ë§µì— í•´ë‹¹í•˜ëŠ” ë³´ê°„ìž‘ì—…ì´ ì™„ë£Œ(完了)ë 때까지 기다립니다. \ - ì´ í•¨ìˆ˜ì˜ ì‚¬ìš©ê³¼ í˜¸ì¶œì— ìžˆì–´, ì œê³µëœ ãˆœì»¤ë¯¸ì¡°ì•„ì˜ í•¨ìˆ˜ í—¤ë” Visual Basic ì—서는 í•¨ìˆ˜ì˜ ì²¨ë‘ì–´ cmc ê°€ 붙지 않습니다. PARAMETER ````````````` â–¶ BoardId: 사용ìžê°€ ì„¤ì •í•œ 디바ì´ìŠ¤(ë³´ë“œ) ID. â–¶ MapIndex : 맵번호(Map index), ì´ ë§µë²ˆí˜¸ë¥¼ ì‚¬ìš©í•˜ê¸°ì „ì— ë¨¼ì € cmcIxMapAxes() 함수를 통하여 해당 ë§µë²ˆí˜¸ì— ìœ íš¨í•œ ì¶•ë“¤ì´ ë§µí•‘ë˜ì–´ 있어야 합니다. â–¶ IsBlocking : 완료ë 때까지 기다리는 ë™ì•ˆ 윈ë„ìš° 메시지를 블ë¡(Blocking)í• ê²ƒì¸ì§€ë¥¼ ê²°ì •í•©ë‹ˆë‹¤. .. csv-table:: :widths: 10 90 :header-rows: 1 :stub-columns: 0 Value, Meaning "| 0 ë˜ëŠ” cmcFALSE", " | 블ë¡(Blocking)ì„ í•˜ì§€ 않습니다. ë”°ë¼ì„œ 해당 ëª¨ì…˜ì´ | 완료ë˜ëŠ” ë™ì•ˆì—ë„ ìœˆë„ìš° ì´ë²¤íŠ¸ë¥¼ 처리합니다." "| 1 ë˜ëŠ” cmcTRUE"," | 블ë¡(Blocking)ì„ í•©ë‹ˆë‹¤. ë”°ë¼ì„œ 해당 ëª¨ì…˜ì´ ì™„ë£Œë˜ëŠ” | ë™ì•ˆì—는 윈ë„ìš° ì´ë²¤íŠ¸ê°€ 처리ë˜ì§€ 않습니다." RETURN VALUE ````````````` +------------+-----------+ | Value | Meaning | +============+===========+ | ìŒìˆ˜ | 수행 실패 | +------------+-----------+ | ERR_NONE | 수행 성공 | +------------+-----------+ REFERENCE ``````````````` - INP ìž…ë ¥ì‹ í˜¸ê°€ Enableë¡œ ì„¤ì •ë˜ì—ˆìœ¼ë©´ Command 펄스 ì¶œë ¥ì´ ì™„ë£Œë˜ì–´ë„ INP ìž…ë ¥ì´ ONì´ ë˜ê¸° ì „ê¹Œì§€ëŠ” ëª¨ì…˜ì´ ì™„ë£Œë˜ì§€ ì•Šì€ ê²ƒìœ¼ë¡œ 간주ë˜ì–´ 반환ë˜ì§€ 않습니다. \ - 서보 ë“œë¼ì´ë¸Œì˜ LSP , LSN ì‹ í˜¸ë¥¼ 사용 ì¤‘ì¸ ê³ ê°(顧客)님께서는 다ìŒì„ 참조해 주ì‹ì‹œìš”. 서보드ë¼ì´ë¸Œì˜ ìž…ë ¥ ì‹ í˜¸ 중 í•˜ë‚˜ì¸ EL(End of Limit) ì‹ í˜¸ëŠ” ì €í¬ ãˆœì»¤ë¯¸ì¡°ì•„ 모션 ë³´ë“œ ë¿ë§Œ ì•„ë‹ˆë¼ ì„œë³´ë“œë¼ì´ë¸Œì—ë„ ì „ë‹¬ ë 수 있ë„ë¡ ì„¤ì •í• ìˆ˜ 있습니다. 통ìƒì 으로 LSP ì‹ í˜¸ì™€ LSN ì‹ í˜¸ë¡œ 불리어 지는 ì´ ì‹ í˜¸ëŠ” ì‹¤ì œ 기구물ì—ì„œ ì–‘ì˜ ë°©í–¥(Positive Direction) í˜¹ì€ ìŒì˜ ë°©í–¥(Negative Direction) ì— ìž¥ì°©ë˜ì–´ 있는 EL(End of Limit) ì‹ í˜¸ë¥¼ 서보 ë“œë¼ì´ë¸Œ ì¸¡ì— ì „ë‹¬í•˜ê¸° 위한 ìš©ë„ë¡œ 사용ë©ë‹ˆë‹¤. \ - 그러나, 모션 소프트웨어ì—ì„œ INP ì„¤ì •ì´ ë˜ì–´ 있는 경우 EL ì‹ í˜¸ê°€ 검출 ëœ í›„ì— ì¼ë¶€ 서보 ë“œë¼ì´ë¸Œì—서는 진행 ë°©í–¥ì—ì„œ ì •ì§€(åœæ¢) 한후 ë” ì´ìƒ 움ì§ì´ì§€ 않는 ìƒí™©ì´ ë°œìƒí•˜ë©°, ì´ ìƒí™©ì—ì„œ INP ì‹ í˜¸ê°€ ì¶œë ¥ë˜ì§€ ì•Šì•„, 모션 ì´ì†¡ì´ 완료ë˜ì§€ ëª»í•˜ê³ , 명시ì 으로 STOP ì„ í•´ì¤˜ì•¼ë§Œ 하는 ê°•ì œì 으로 모션 종료가 ë˜ëŠ” 현ìƒì´ ë°œìƒí• 수 있습니다. ì´ í˜„ìƒì€ EL 모드를 통해 ì›ì 복귀를 하는 ìƒí™©ì—ì„œë„ ë°œìƒí• 수 있습니다. \ - ë”°ë¼ì„œ, ì´ëŸ¬í•œ 경우ì—는 반드시 ì›ì 복귀나 EL ê²€ì¶œì‹œì— ì¸í„°ëŸ½íŠ¸ ì´ë²¤íŠ¸ë‚˜ 타ì´ë¨¸ë¥¼ 통해 INP 를 무기한 대기하는 현ìƒì— 대해서 ì ì ˆížˆ 대처하시거나 INP ì‹ í˜¸ ì‚¬ìš©ì„ ë°°ì œ 해야 합니다. .. note:: "윈ë„ìš° ì´ë²¤íŠ¸ë¼ëŠ” ê²ƒì€ ë¬´ì—‡ìž…ë‹ˆê¹Œ?" 윈ë„ìš° ìš´ì˜ì²´ì œëŠ” Event Driven í˜¹ì€ Message Driven ë°©ì‹1ì˜ êµ¬ì¡°ë¡œ ë˜ì–´ 있습니다. ê° ì‘ìš©í”„ë¡œê·¸ëž¨ì€ ë©”ì‹œì§€ í(Queue)를 ê°€ì§€ê³ ìžˆìœ¼ë©°, ì •í™•ížˆ ë§í•˜ë©´, 메시지를 사용해 ì´ë²¤íŠ¸ë¥¼ 통지하는 ë°©ì‹ìœ¼ë¡œ 설계ë˜ì–´ 있습니다. 윈ë„ìš° 메시지를 처리한다는 ê²ƒì€ ë©”ì‹œì§€ íì—ì„œ 메시지를 하나씩 꺼내서 윈ë„ìš° í”„ë¡œì‹œì €ì— ì „ì†¡í•œë‹¤ëŠ” ê²ƒì„ ì˜ë¯¸í•˜ë©°, ì´ê²ƒì€ ê·¸ í–‰ì„ ì§€ê°€ ë˜ëŠ” 윈ë„ìš°ì— ì „ì†¡ë˜ì–´ 처리ë©ë‹ˆë‹¤. EXAMPLE ````````` .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ #define MAP0 0 //맵번호 (0) // BoardID는 0으로 ì„ ì–¸ë˜ì—ˆë‹¤ê³ ê°€ì •í•¨ cmcIxMapAxes(BoardID, MAP0, cmcX1_MASK | cmY1_MASK, 0 ); //ë˜ëŠ” cmcIxMapAxes(BoardID, MAP0, 0x3, 0x0); //ë³´ê°„ ì´ë™í• ì¶•ë“¤ì˜ ê¸°ë³¸ì†ë„를 ì„¤ì •í•©ë‹ˆë‹¤. ...//ì†ë„ 패턴 ì„¤ì • long nIsDone = 0; double fDistList[2] = {1000, 1000}; if(cmcIxLine(BoardID, MAP0, fDistList, cmcFALSE) != ERR_NONE){ // ì—러메시지 ì¶œë ¥ return; } //ëª¨ì…˜ì´ ì™„ë£Œ ë ë•Œ 까지 기다립니다. if(cmcIxWaitDone(BoardID, MAP0, cmcFALSE) != ERR_NONE){ // ì—러메시지 ì¶œë ¥ return ; }